From f9064fd6c8f3be5f41c9fed6d007d248fda2d4d5 Mon Sep 17 00:00:00 2001 From: Bryant Mairs Date: Wed, 25 Jan 2017 17:18:19 -0800 Subject: [PATCH] Improve error for dependencies that don't have the same source path for all build targets. --- src/cargo/util/toml.rs | 5 +++-- tests/bad-config.rs | 48 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/cargo/util/toml.rs b/src/cargo/util/toml.rs index 2a70feecb..704557f1a 100644 --- a/src/cargo/util/toml.rs +++ b/src/cargo/util/toml.rs @@ -636,8 +636,9 @@ impl TomlManifest { let name = dep.name(); let prev = names_sources.insert(name, dep.source_id()); if prev.is_some() && prev != Some(dep.source_id()) { - bail!("found duplicate dependency name {}, but all \ - dependencies must have a unique name", name); + bail!("Dependency '{}' has different source paths depending on the build \ + target. Each dependency must have a single canonical source path \ + irrespective of build target.", name); } } } diff --git a/tests/bad-config.rs b/tests/bad-config.rs index fd22ea3f6..63aae50df 100644 --- a/tests/bad-config.rs +++ b/tests/bad-config.rs @@ -553,7 +553,53 @@ fn duplicate_deps() { [ERROR] failed to parse manifest at `[..]` Caused by: - found duplicate dependency name bar, but all dependencies must have a unique name + Dependency 'bar' has different source paths depending on the build target. Each dependency must \ +have a single canonical source path irrespective of build target. +")); +} + +#[test] +fn duplicate_deps_diff_sources() { + let foo = project("foo") + .file("shim-bar/Cargo.toml", r#" + [package] + name = "bar" + version = "0.0.1" + authors = [] + "#) + .file("shim-bar/src/lib.rs", r#" + pub fn a() {} + "#) + .file("linux-bar/Cargo.toml", r#" + [package] + name = "bar" + version = "0.0.1" + authors = [] + "#) + .file("linux-bar/src/lib.rs", r#" + pub fn a() {} + "#) + .file("Cargo.toml", r#" + [package] + name = "qqq" + version = "0.0.1" + authors = [] + + [target.i686-unknown-linux-gnu.dependencies] + bar = { path = "shim-bar" } + + [target.x86_64-unknown-linux-gnu.dependencies] + bar = { path = "linux-bar" } + "#) + .file("src/main.rs", r#"fn main () {}"#); + + assert_that(foo.cargo_process("build"), + execs().with_status(101).with_stderr("\ +[ERROR] failed to parse manifest at `[..]` + +Caused by: + Dependency 'bar' has different source paths depending on the build target. Each dependency must \ +have a single canonical source path irrespective of build target. ")); } -- 2.30.2